# -*- coding: utf-8 -*-
# @Time    : 2024/6/21 16:41
# @Author  : floraachy
# @File    : repo_code_new_file_page
# @Software: PyCharm
# @Desc:

# 标准库导入
# 第三方库导入
import allure
# 本地应用/模块导入
from utils.base_utils.base_page import BasePage


class RepoCodeNewFilePage(BasePage):
    """项目-新建文件页面"""
    # 文件名/路径输入框  "//div[@class='grid-item']//input[@placeholder='命名文件名称或文件路径']"
    locator_file_path_input = "//input[@placeholder='命名文件名称或文件路径']"
    # 文件内容codemirror
    locator_file_content_textarea = "//textarea/parent::div/parent::div[contains(@class, 'CodeMirror-wrap')]"
    # commits输入框
    locator_commit_input = "//textarea[@id='UserSubmitForm_desc']"
    # 新的分支radio
    locator_new_branch_radio = "//span[text()='新的分支']/parent::span/preceding-sibling::span"
    # 新分支名称输入框
    locator_new_branch_input = "//input[@placeholder='请输入分支名称']"
    # 提交变更按钮
    locator_submit_change_btn = "//span[text()='提交变更']/parent::button"

    @allure.step("访问新建文件页面：/{repo_owner}/{repo_identifier}/{branch}/newfile")
    def navigate(self, repo_owner, repo_identifier, branch="master"):
        """
        访问新建文件页面
        """
        self.visit(f"/{repo_owner}/{repo_identifier}/{branch}/newfile")

    @allure.step("输入文件名称或文件路径：{file_name}")
    def input_file_name(self, file_name):
        """
       输入文件名称或文件路径
       """
        self.input(self.locator_file_path_input, file_name)

    @allure.step("输入文件内容：{file_content}")
    def input_file_content(self, file_content):
        """
       输入文件内容
       """
        self.page.wait_for_timeout(1000)
        elem = self.page.query_selector(selector=self.locator_file_content_textarea)
        self.execute_js('''([elem, content]) => elem.CodeMirror.setValue(content);''',
                        [elem, file_content])

    @allure.step("输入commit信息：{commits}")
    def input_commit_info(self, commits):
        """
        输入commit信息
        """
        self.input(self.locator_commit_input, commits)

    @allure.step("选择新建分支radio")
    def check_to_new_branch(self):
        """
        点击新建分支radio
        """
        self.click(self.locator_new_branch_radio)

    @allure.step("新的分支名称: {branch_name}")
    def input_new_branch_name(self, branch_name):
        """
        输入新的分支名称
        """
        self.input(self.locator_new_branch_input, branch_name)

    @allure.step("点击【提交变更】按钮")
    def click_commit_change_button(self):
        """
        点击提交变更按钮
        """
        self.click(self.locator_submit_change_btn)
        self.wait(3)

    # --------------------- 流程 -------------------------------------
    @allure.step("新建文件， 文件名：{filename}， 内容：{content}， 提交信息：{commits}")
    def new_file_on_default_branch_flow(self, filename, content, commits):
        """
        在默认分支新建文件
        """
        # 输入文件名
        self.input_file_name(filename)
        # 输入文件内容
        self.input_file_content(content)
        # 输入commit信息
        self.input_commit_info(commits)
        # 点击提交变更按钮
        self.click_commit_change_button()
